package com.xique.api.controller;

import com.xique.api.constants.RedisConstants;
import com.xique.common.core.utils.DateUtils;
import com.xique.common.core.utils.StringUtils;
import com.xique.common.core.web.controller.BaseController;
import com.xique.common.core.web.domain.AjaxResult;
import com.xique.common.redis.service.RedisService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * @author caogq
 * @version 1.0
 * @description: 金德隆接口
 * @date 2022/5/18 8:57
 */

@Slf4j
@RestController
@RequestMapping("/jdl")
public class JdlController extends BaseController {

    @Autowired
    private RedisService redisService;

    @GetMapping("/verify")
    @ApiOperation("金德隆一天限领一次优惠券")
    public AjaxResult verify(@RequestParam("uniqueCode") String uniqueCode) {
        log.info("进入领券页面，唯一编码：" + uniqueCode);
        //step1: 校验
        if (StringUtils.isEmpty(uniqueCode)) {
            log.info("用户唯一标识为空，请联系管理员！");
            return AjaxResult.error("用户唯一标识为空，请联系管理员！");
        }
        String key = RedisConstants.JDL_USER_CODE_PREFIX + uniqueCode;
        Object count = redisService.getCacheObject(key);
        if (Objects.isNull(count)) {
            //step2: 今天第一次验证，故之前缓存中无该键，设置缓存当天失效
            redisService.setCacheObject(key, 1, DateUtils.getRemainSecondsOneDay(new Date()), TimeUnit.SECONDS);
            log.info("符合领券资格");
            return AjaxResult.success("符合领券资格");
        }
        //step3: 超过限制次数(1次)，直接返回
        log.info("优惠券领取次数已到达当天上限");
        return AjaxResult.error("优惠券领取次数已到达当天上限");
    }

}
